//
// @Auther: by wujehy 
// @Email:wujehy@qq.com
// @Data:20-3-16
// @Time:下午2:05
//

#include <iostream>

#include "SingletonObject.h"
/**
 *  ABCDE 这几个方法没有代码交换的 地方
 */

/**
 * 方法A 的作用是生成 单例的 基本信息
 *
 */
void funcA(){
   // 这里 会 经过 获取单例的模式 ,其中 打印了一下单例的 地址
   // 注意 这个地址
    SingletonObject::getInstance()->setSingletonname("SingletonObjectName");

    // 保存了几个信息
    bool isok= false;

    isok = SingletonObject::getInstance()->saveUserdata("abc1","dataAbc1");
    std::cout<<" add 1 isok "<<isok<<std::endl;

    isok = SingletonObject::getInstance()->saveUserdata("abc2","dataAbc2");
    std::cout<<" add 2 isok "<<isok<<std::endl;

    isok =  SingletonObject::getInstance()->saveUserdata("abc3","dataAbc3");
    std::cout<<" add 3 isok "<<isok<<std::endl;

    isok =  SingletonObject::getInstance()->saveUserdata("abc4","dataAbc4");
    std::cout<<" add 4 isok "<<isok<<std::endl;

    isok =   SingletonObject::getInstance()->saveUserdata("abc5","dataAbc5");
    std::cout<<" add 5 isok "<<isok<<std::endl;

    isok =   SingletonObject::getInstance()->saveUserdata("abc6","dataAbc6");
    std::cout<<" add 6 isok "<<isok<<std::endl;

    // 这个是重复的
    isok =   SingletonObject::getInstance()->saveUserdata("abc6","dataAbc6");
    std::cout<<" add 7 isok "<<isok<<std::endl;

    // 获取一个信息
    std::string getData1 =SingletonObject::getInstance()->getUserData("abc1");
    std::cout<<" data1 = "<<getData1<<std::endl;

} 
void funcB(){
    // 这里传递了一下
    SingletonObject tempData = *SingletonObject::getInstance();
    SingletonObject *ptempData = SingletonObject::getInstance();
    // 传递 一个 对象
    std::string getData1 =tempData.getUserData("abc1");
    std::cout<<" data1 = "<<getData1<<std::endl;
    // 对比这两个 对象的名称
    std::cout<<" SingletonObject::getInstance()->getSingletonname()= "<<SingletonObject::getInstance()->getSingletonname()<<std::endl;

    std::cout<<"ptempData = " << ptempData->getSingletonname()<<std::endl;
    //

    // 地址的对比

    std::cout<<" addr : "<<std::endl;
    std::cout<<" SingletonObject : "<<SingletonObject::getInstance()<<std::endl;
    std::cout<<" &tempData : "<<&tempData<<std::endl;
    std::cout<<" ptempData : "<<ptempData<<std::endl;


}

void funcC(){

}

void funcD(){

}

void funcE(){

}


int main(){
    funcA();
    funcB();
    return 0;
}